package CutLoad.cookies
{
	import CutLoad.Base;
	import CutLoad.components.CTextField;
	
	import flash.events.Event;

	/**
	 * 对CLoadImg里的图片，进行预加载，这样它们在这些图片，已经加载到内存中。再次调用CLoadImg的时候不会加载的状态。
	 * @author smallerbird mail:smallerbird@gmail.com  site:www.mkigm.com QQ群:49983196
	 * 
	 */	
	public class CLoadImgWarmUp extends Base
	{
		//加载路径
		private var arrPath:Array;
		//是否开始
		private var isStart:Boolean;
		//正在加载用的CLoadImg
		private var arrCL:Array;
		//进度
		private var funProgress:Function,funLoadCompt:Function;
		//保存加载成功的
		private var arrOk:Array;
		//保存加载失败的
		private var arrNo:Array;
		/**
		 * 初始化 
		 * @param arrPath 要加的图片列表数组，格式为:[图片地址1,图片地址2,....]
		 * @param funLoadCompt 加载完成回调方法  格式：function(me:CLoadImgWarmUp);
		 * @param funProgress 加载的过程中回调方法  格式：function(me:CLoadImgWarmUp);
		 * @param isStart 是否现在开始加载
		 * 
		 */		
		public function CLoadImgWarmUp(arrPath:Array,funLoadCompt:Function,funProgress:Function=null,isStart:Boolean=true)
		{
			this.funLoadCompt=funLoadCompt;
			this.funProgress=funProgress;
			this.arrPath=arrPath;
			this.isStart=isStart;
			if(isStart){
				start();
			}
		}
		/**
		 * 开始加载 
		 * 
		 */		
		public function start():void{
			if(!isStart) return;
			arrOk=new Array();
			arrNo=new Array();
			arrCL=new Array();
			for(var i:Number=0;i<arrPath.length;i++){
				var cl:CLoadImg=new CLoadImg(arrPath[i],0,0,loadCMPT,0x000000,loadError);
				var txt:CTextField=CTextField.getSimpleTxt(arrPath[i]);
				txt.getTextField().border=true;
				txt.getTextField().background=true;
				cl.addChildExpand(txt)
					//*/
				arrCL.push(cl);
			}
			isStart=true;
			this.addEventListener(Event.ENTER_FRAME,enter_frame);
		}
		/**
		 * 返回详细的加载信息
		 * @return 格式说明 
		 * {
				okLoad:加载完成的数量,
				noLoad:加载错误的数量,
				nowLoad:正在加载的数量，
				percen:加载比,
				arrCLoadImg:arrCL  加载这些图片用到的CLoadImg,从这里可以获得每一个图片加载的情怳
			}
		 * 
		 */		
		public function getLoadProgressInfo():Object{
			var numOK:Number=arrOk.length;
			var numNO:Number=this.arrNo.length;
			var numCount:Number=arrPath.length;
			var nowLoad:Number=numCount-numOK-numNO;
			//整体
			var p:Number=(numOK+numNO)/numCount;
			return {okLoad:numOK,noLoad:numNO,nowLoad:nowLoad,percen:p,arrCLoadImg:arrCL}
			
		}
		/**
		 * 返回加载 
		 * @param type 1返回 加载百分比 xx.xx%   黙认为:xx%
		 * @return 
		 * 
		 */		
		public function getLoadProgressPercen(type:Number=100):Number{
			switch(type){
				case 1:
					var numOK1:Number=arrOk.length;
					var numNO1:Number=this.arrNo.length;
					var numCount1:Number=arrPath.length;
					var p1:Number=(numOK1+numNO1)/numCount1
					return Math.floor(p1*10000)/100;
					break;
				default:
					var numOK:Number=arrOk.length;
					var numNO:Number=this.arrNo.length;
					var numCount:Number=arrPath.length;
					var p:Number=(numOK+numNO)/numCount
					return Math.floor(p*100);
					break;
			}
		}
		private function enter_frame(e:Event):void{
			var numOK1:Number=arrOk.length;
			var numNO1:Number=this.arrNo.length;
			//
			if(checkOver()){
				if(funLoadCompt!=null) funLoadCompt(this)
				killMe();
			}else{
				if(funProgress!=null) funProgress(this);
			}
		}
		//加载完成
		private function loadCMPT(me:CLoadImg):void{
			arrOk.push(me);
			//trace("加载完成.."+me.imgPath);
		}
		//加载错误
		private function loadError(me:CLoadImg):void{
			arrNo.push(me);
			//trace("加载错误.."+me.imgPath);
		}
		//是否都处理完了
		private function checkOver():Boolean{
			//trace(arrOk.length+"/"+arrNo.length+"="+arrCL.length);
			if(arrOk.length+arrNo.length==arrCL.length){
				//完成了
				return true;
			}
			return false;
		}
		override public function killMe():void{
			if(this.hasEventListener(Event.ENTER_FRAME)) this.removeEventListener(Event.ENTER_FRAME,enter_frame);
			super.killMe();
		}
	}
}